package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class OrderAcceptanceActivity extends AppCompatActivity {

    private TextView tvSchoolName;
    private TextView tvCurrentDate;
    private Button btnBack;
    private LinearLayout orderListContainer; // 订单列表容器

    // OkHttp客户端
    private OkHttpClient client;
    // Gson解析器
    private Gson gson;
    // 用于UI更新的Handler
    private Handler mainHandler;

    // 后端接口URL（示例URL，实际使用时需替换为真实接口地址）
    private static final String ORDER_API_URL = "http://example.com/api/orders";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order_acceptance);

        // 初始化控件
        initViews();
        
        // 设置点击事件
        setListeners();
        
        // 设置学校名称和当前日期
        setSchoolAndDate();
        
        // 初始化OkHttp客户端和Gson解析器
        client = new OkHttpClient();
        gson = new Gson();
        mainHandler = new Handler(Looper.getMainLooper());
        
        // 请求后端接口获取订单数据
        fetchOrderDataFromServer();
    }

    /**
     * 初始化控件，将变量与控件关联
     */
    private void initViews() {
        tvSchoolName = findViewById(R.id.tv_school_name);
        tvCurrentDate = findViewById(R.id.tv_current_date);
        btnBack = findViewById(R.id.btn_back);
        // 不需要orderListContainer，因为我们使用order_list_parent
    }

    private void setListeners() {
        // 返回按钮点击事件
        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }

    /**
     * 请求后端接口获取订单数据
     */
    private void fetchOrderDataFromServer() {
        // 创建请求对象
        Request request = new Request.Builder()
                .url(ORDER_API_URL)
                .get() // GET请求
                .build();

        // 发送异步请求
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                // 请求失败，在主线程显示错误提示并使用模拟数据
                mainHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(OrderAcceptanceActivity.this, 
                                "网络请求失败，使用模拟数据", Toast.LENGTH_SHORT).show();
                        // 使用模拟数据
                        List<OrderItem> mockOrderItems = generateMockOrderData();
                        renderOrderData(mockOrderItems);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful() && response.body() != null) {
                    // 获取响应体的JSON字符串
                    String jsonResponse = response.body().string();
                    
                    // 解析JSON数据为OrderItem列表
                    // 假设API返回的JSON格式是：{"orders": [{...}, {...}, ...]}
                    // 这里使用TypeToken来处理泛型
                    Type listType = new TypeToken<List<OrderItem>>(){}.getType();
                    List<OrderItem> orderItems = gson.fromJson(jsonResponse, listType);
                    
                    // 在主线程更新UI
                    final List<OrderItem> finalOrderItems = orderItems;
                    mainHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            renderOrderData(finalOrderItems);
                        }
                    });
                } else {
                    // 响应不成功，使用模拟数据
                    mainHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(OrderAcceptanceActivity.this, 
                                    "获取订单数据失败，使用模拟数据", Toast.LENGTH_SHORT).show();
                            List<OrderItem> mockOrderItems = generateMockOrderData();
                            renderOrderData(mockOrderItems);
                        }
                    });
                }
            }
        });
    }

    /**
     * 将订单数据渲染到界面
     */
    private void renderOrderData(List<OrderItem> orderItems) {
        // 获取订单列表容器
        LinearLayout parentLayout = findViewById(R.id.order_list_parent);
        
        // 移除默认的空订单行（如果有）
        if (parentLayout.getChildCount() > 1) {
            // 保留第一个子视图（表头），移除其他视图
            for (int i = parentLayout.getChildCount() - 1; i > 0; i--) {
                // 跳过底部信息
                if (parentLayout.getChildAt(i) instanceof TextView && 
                    ((TextView) parentLayout.getChildAt(i)).getText().toString().contains("版本")) {
                    continue;
                }
                parentLayout.removeViewAt(i);
            }
        }

        // 动态创建订单行并添加到界面
        for (final OrderItem orderItem : orderItems) {
            // 创建订单行容器
            LinearLayout orderRow = new LinearLayout(this);
            LinearLayout.LayoutParams rowParams = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, 46);
            orderRow.setLayoutParams(rowParams);
            orderRow.setOrientation(LinearLayout.HORIZONTAL);
            orderRow.setGravity(Gravity.CENTER_VERTICAL);
            orderRow.setBackgroundColor(getResources().getColor(android.R.color.white));
            
            // 添加学校名称
            orderRow.addView(createDataTextView(orderItem.getSchoolName(), 1));
            
            // 添加校区名称
            orderRow.addView(createDataTextView(orderItem.getCampusName(), 1));
            
            // 添加餐次
            orderRow.addView(createDataTextView(orderItem.getMealType(), 1));
            
            // 添加订单号
            orderRow.addView(createDataTextView(orderItem.getOrderNumber(), 2));
            
            // 添加配送单位
            orderRow.addView(createDataTextView(orderItem.getDeliveryUnit(), 2));
            
            // 添加配送时间
            orderRow.addView(createDataTextView(orderItem.getDeliveryTime(), 2));
            
            // 创建验收按钮
            Button btnAccept = new Button(this);
            LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(0, 40, 1);
            btnParams.setMargins(5, 5, 5, 5);
            btnAccept.setLayoutParams(btnParams);
            btnAccept.setText("验收");
            btnAccept.setTextColor(getResources().getColor(android.R.color.white));
            btnAccept.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_light));
            btnAccept.setTextSize(14);
            
            // 设置按钮点击事件
            btnAccept.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 传递订单信息到食材验收页面
                    Intent intent = new Intent(OrderAcceptanceActivity.this, FoodAcceptanceActivity.class);
                    intent.putExtra("ORDER_NUMBER", orderItem.getOrderNumber());
                    intent.putExtra("SCHOOL_NAME", orderItem.getSchoolName());
                    startActivity(intent);
                }
            });
            
            // 添加验收按钮到订单行
            orderRow.addView(btnAccept);
            
            // 添加订单行到父容器
            // 找到底部信息前的位置添加，为什么要找到底部信息前？
//            int bottomInfoIndex = -1;
//            for (int i = 0; i < parentLayout.getChildCount(); i++) {
//                if (parentLayout.getChildAt(i) instanceof TextView &&
//                    ((TextView) parentLayout.getChildAt(i)).getText().toString().contains("版本")) {
//                    bottomInfoIndex = i;
//                    break;
//                }
//            }
//
//            if (bottomInfoIndex > 0) {
//                parentLayout.addView(orderRow, bottomInfoIndex);
//            } else {
//                parentLayout.addView(orderRow);
//            }

            // 通过创建一个空的容器，然后添加订单行
            LinearLayout container = findViewById(R.id.order_list_container);
            container.addView(orderRow); // 直接添加，不需要查找插入位置

        }
    }

    /**
     * 生成模拟数据并渲染到界面（兼容旧版本）
     */
    private void generateAndRenderOrderData() {
        List<OrderItem> orderItems = generateMockOrderData();
        renderOrderData(orderItems);
    }

    /**
     * 创建数据显示的TextView
     */
    private TextView createDataTextView(String text, int weight) {
        TextView textView = new TextView(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, weight);
        textView.setLayoutParams(params);
        textView.setText(text);
        textView.setTextSize(14);
        textView.setTextColor(getResources().getColor(android.R.color.black));
        textView.setGravity(LinearLayout.TEXT_ALIGNMENT_CENTER);
        return textView;
    }

    /**
     * 生成5条模拟订单数据
     */
    private List<OrderItem> generateMockOrderData() {
        List<OrderItem> orderItems = new ArrayList<>();
        
        // 添加5条模拟数据
        orderItems.add(new OrderItem("新诺鑫测试学校", "东校区", "午餐", "OD20250908001", "绿源食品配送中心", "2025-09-08 10:30"));
        orderItems.add(new OrderItem("新诺鑫测试学校", "西校区", "午餐", "OD20250908002", "绿源食品配送中心", "2025-09-08 10:45"));
        orderItems.add(new OrderItem("新诺鑫测试学校", "南校区", "午餐", "OD20250908003", "绿源食品配送中心", "2025-09-08 11:00"));
        orderItems.add(new OrderItem("希望小学", "主校区", "午餐", "OD20250908004", "鲜品配送有限公司", "2025-09-08 10:50"));
        orderItems.add(new OrderItem("阳光中学", "高中部", "午餐", "OD20250908005", "健康食材配送中心", "2025-09-08 11:15"));
        
        return orderItems;
    }

    private void setSchoolAndDate() {
        // 设置学校名称（示例）
        tvSchoolName.setText("新诺鑫测试学校");
        
        // 设置当前日期（示例）
        tvCurrentDate.setText("2025-09-08");
    }
}